//
//  BXPUserHomeBaseTableViewController.swift
//  XerxesPP
//
//  Created by 向攀 on 2017/8/17.
//  Copyright © 2017年 Boos－XP. All rights reserved.
//

import UIKit

@objc protocol BXPUserHomeBaseTableViewControllerDelegate: NSObjectProtocol {
    @objc optional func userHomeTableViewDidEndScrollView()
    
    //监听tableView的offset在一定范围内的值,用于头部导航栏和titleBar的处理
    @objc optional func userHomeBaseTableViewController(controller: BXPUserHomeBaseTableViewController, didScroll offsetY: CGFloat)
}

class BXPUserHomeBaseTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UIScrollViewDelegate {

    var tableView: UITableView!
    private var tableViewObserMinOffsetY: CGFloat = 0
    private var tableViewObserMaxOffsetY: CGFloat = 0
    
//    private var tableViewLastOffsetY: CGFloat = 0 //上次的偏移值,可用于判断滚动方向
    
//    private var endScrollBlock: (() -> ())?
    weak var offsetObserver: BXPUserHomeBaseTableViewControllerDelegate?
    
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        tableView = UITableView(frame: self.view.bounds, style: .plain)
        tableView.delegate = self
        tableView.dataSource = self
        
        
        view.addSubview(tableView)
        tableView.tableHeaderView = headerView
        
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    private lazy var headerView: UIView = {
        let tempView = UIView(frame: CGRect(x: 0, y: 0, width: 0, height: 440))
        tempView.backgroundColor = UIColor.white
        
        return tempView
    }()

    //MARK: - UITableViewDelegate, UITableViewDataSource
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 10
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let reuseCell = tableView.dequeueReusableCell(withIdentifier: "cell.reuse")
        let cell = reuseCell == nil ? UITableViewCell(style: .default, reuseIdentifier: "cell.reuse") : reuseCell
        
        cell?.textLabel?.text = String(format: "--原始-数据--%li", indexPath.row)
        
        return cell!
    }
    
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 50
    }
    
    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        let offsetY = scrollView.contentOffset.y
        
//        if offsetY < tableViewObserMinOffsetY || offsetY > tableViewObserMaxOffsetY {
        if offsetY > tableViewObserMaxOffsetY {
            return
        }
        if offsetObserver != nil && (offsetObserver?.responds(to: #selector(BXPUserHomeBaseTableViewControllerDelegate.userHomeBaseTableViewController(controller:didScroll:))))! {
            offsetObserver?.userHomeBaseTableViewController!(controller: self, didScroll: offsetY)
        }
//        print(offsetY)
//        print("--xp--home-table-scroll")
    }
    
    func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
        if !decelerate {
            scrollViewDidEndDecelerating(scrollView)
        }
    }
    
    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
        
        if offsetObserver != nil && (offsetObserver?.responds(to: #selector(BXPUserHomeBaseTableViewControllerDelegate.userHomeTableViewDidEndScrollView)))! {
            offsetObserver?.userHomeTableViewDidEndScrollView!()
        }
    }
    
    func setupHeaderHeight(_ height: CGFloat, tableViewDidEndScroll block: @escaping (() -> ())) -> Void {
//        tableViewObserMinOffsetY = height + 5
        headerView.frame = CGRect(x: 0, y: 0, width: view.bounds.width, height: height)

    }
    
    func setupHeaderHeight(_ height: CGFloat, offsetYObserver: BXPUserHomeBaseTableViewControllerDelegate) -> Void {
        tableViewObserMaxOffsetY = height + 2 //设置最大的offsetY的监听值,增加2防止刚好为临界值时不一定调用scrollViewDidScroll方法
        offsetObserver = offsetYObserver
        
        headerView.frame = CGRect(x: 0, y: 0, width: view.bounds.width, height: height)
    }
    
    func setupHeaderView(_ view: UIView) -> Void {
        headerView.addSubview(view)
        view.frame = headerView.bounds
        headerView.layoutIfNeeded()
        view.layoutIfNeeded()
    }
    
    func getViewContentOffsetY() -> CGFloat {
        return tableView.contentOffset.y
    }
    
    func setViewContentOffset(offsetY: CGFloat) -> Void {
        if tableView == nil {
            view.layoutSubviews()
        }
        tableView.contentOffset = CGPoint(x: 0, y: offsetY)
    }
}
